#ifndef PDF_Main_ISR_Base_H
#define PDF_Main_ISR_Base_H

#include "PDF/Main/PDF_Base.H"

namespace PDF {

  class ISR_Base { 
  protected:

    PDF_Base *p_pdf;

    std::string     m_type;
    ATOOLS::Flavour m_bunch;

    double m_weight, m_exponent, m_xmax;
    bool   m_on;

  public:
    ISR_Base(PDF_Base *pdf);
    virtual ~ISR_Base();

    bool On() const   { return m_on;   }

    inline const std::string     Type() const    { return m_type;  }
    inline const ATOOLS::Flavour Flavour() const { return m_bunch; }
    inline double Exponent() const               { return m_exponent; }
    inline double XMax() const                   { return m_xmax;     } 
    inline void SetPDF(PDF_Base *pdf)            { p_pdf = pdf;  }
    inline PDF_Base * PDF() const                { return p_pdf; }
    inline virtual void SetRescaleFactor(const double & rescale) {
      p_pdf->SetRescaleFactor(rescale);
    }
    inline virtual void SetRescaling(const bool & resc=true) {
      p_pdf->SetRescaling(resc);
    }      

    virtual bool   CalculateWeight(double x,double z,double kp2,
				   double Q2,int warn) = 0;
    virtual double Weight(ATOOLS::Flavour) = 0;

  };
}

#endif
